Vertex AI Workbench のユーザー管理のノートブックとインスタンスでroot アクセスを有効・無効で作成した時の差を調べてみた
データ事業部の根本です。以前、新しい Vertex AI Workbench のユーザー管理のノートブックとインスタンスで root アクセスを無効にするポリシーの記事を書いたときに、rootアクセスを有効・無効にした場合具体的にどういった箇所の設定が変わっているのかが気になっていました。なので今回はその違い実際に調べてみました。
目標
Vertex AI Workbench のユーザー管理のノートブックとインスタンスでrootアクセスを有効・無効にした場合どの設定が変わっているのか確かめることが今回の目標です。
以前rootアクセスを有効にした時は、sudoコマンドをパスワードなしで実行できました(以前のブログで確認済みです。 よって、rootアクセスを有効/無効にした場合sudoers
ファイルやグループ
関連で何か違いがあるのではないかと思っていました。
まずはrootアクセスを有効にしたパターンを調査する
まず、rootアクセスを有効にしてインスタンスを作成してみました。作成後、Vertex AI WorkbenchのコンソールからJupyter Labへアクセスしてterminalにてid
コマンドを実行して現在の所属グループなどを確認します。以下が実行コマンドと出力です。
(base) jupyter@instance-20240708-141438:~$id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),27(sudo),997(docker),1000(google-sudoers)
出力を整理すると以下となります。
ユーザー情報
パラメータ | 値 |
---|---|
ユーザーID (UID) | 1000 (jupyter) |
グループID (GID) | 1001 (jupyter) |
グループ情報
グループID | グループ名 | 説明 |
---|---|---|
1001 | jupyter | プライマリグループ |
4 | adm | システムの管理タスクを実行するための特権を持つ |
27 | sudo | sudo コマンドを使用して root 権限でコマンドを実行できる |
997 | docker | Docker コマンドを実行するための特権を持つ |
1000 | google-sudoers | Google Cloud Platform(GCP)環境で特定の管理タスクを実行するための特権を持つ |
上記より現在使用しているユーザjupyter
が、sudo
とgoogle-sudoers
グループに所属していることが確認できました。
それでは続けてsudoers
ファイルも確認してみます。
以下が実行コマンドと出力(抜粋)です。
(base) jupyter@instance-20240708-141438:~$ sudo cat /etc/sudoers
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
@includedir
でインクルードしている内容は以下でした
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
上記より、google-sudoersグループに属しているユーザはすべてのホストで、すべてのユーザーとして、すべてのコマンドをパスワードなしで実行できることになります。
また、NOPASSWD:ALL
の設定があるのでrootアクセスをした場合にはsudoコマンドをパスワードなしで使用することができるわけです。
rootアクセスを無効にしたパターンを調査する
rootアクセスを無効にした状態でインスタンスを作成しました。先ほどと同様にコマンドでユーザ情報を確認します。
(base) jupyter@instance-20240708-145641:~$ id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),997(docker)
出力を整理すると以下となります。
ユーザー情報
パラメータ | 値 |
---|---|
ユーザーID (UID) | 1000 (jupyter) |
グループID (GID) | 1001 (jupyter) |
グループ情報
グループID | グループ名 | 説明 |
---|---|---|
1001 | jupyter | プライマリグループ |
4 | adm | システムの管理タスクを実行するための特権を持つ |
997 | docker | Docker コマンドを実行するための特権を持つ |
ユーザ情報は特に変更がないですが、グループ情報にsudo
やgoogle-sudoers
が見当たりません。
sudoers
ファイルも確認してみます。
rootアクセスを無効化してインスタンス作成しているため、jupyterユーザにはsudoコマンドを実行することができません。よって今回はCloud Shellからcompute ssh
コマンドでインスタンスにアクセスしてsudoers
ファイルを確認しました。compute sshコマンドでインスタンスに接続するとデフォルトではLinux Userのパスワードは設定されていないのでsudo passwd
でrootユーザのパスワードを設定することができます。そうすることでsudoコマンドも使えるようになるので確認できるという寸法です。
$ gcloud compute ssh インスタンス名 --zone=asia-northeast1-a
でインスタンスにsshをします。
$ sudo passwd
にてrootユーザのパスワードを設定します。
そしてsudoers
を確認します。
$ sudo cat /etc/sudoers
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d
同じですね・・・
つまり、rootアクセスの有効無効ではjupyterユーザの所属グループに違いがある(sudo
・google-sudoers
に所属している)ということに起因するようです!
まとめ
以下がrootアクセスを有効・無効にした時のグループをまとめた表です。
rootアクセス有効・無効 | グループID | グループ名 | 説明 |
---|---|---|---|
有効 | 27 | sudo | sudo コマンドを使用して root 権限でコマンドを実行できる |
有効 | 1000 | google-sudoers | Google Cloud Platform(GCP)環境で特定の管理タスク |
有効・無効 | 1001 | jupyter | プライマリグループ |
有効・無効 | 4 | adm | システムの管理タスクを実行するための特権を持つ |
有効・無効 | 997 | docker | Docker コマンドを実行するための特権を持つ |
私の持てる知識で確認したところ、rootアクセスを有効化するとインスタンス作成時にsudo
・google-sudoers
グループにjupyterユーザを追加してくれるということが結論でした。
他にも差分があるかもなのですが調査しきれませんでした・・・
もしこの記事が、Vertex AIのrootアクセスの有効・無効の違いが気になっているかたのお役に立っていたらとても嬉しいです。それではまた。